import axios from "axios";

import axiosAdapterUniapp from 'axios-adapter-uniapp'

// 创建axios对象
const request = axios.create({
	baseURL: 'http://localhost:8080',
	timeout: 30000,
	adapter: axiosAdapterUniapp
})

// 添加请求拦截器
// 可以用于添加请求头，比如token
request.interceptors.request.use((config) => {
	// 在发送请求之前做些什么
	config.headers['Content-Type'] = 'application/json;charset=UTF-8';
	uni.showLoading({
		title: '加载中',
		mask: true // 遮罩层，防止穿透,
	})
	const token = uni.getStorageSync('token');
	// 携带token并屏蔽一些地址(请求ip的地址)
	if (token) {
		config.headers['token'] = token;
	}
	return config;
}, (error) => {
	uni.hideLoading();
	console.log('request error:' + error);
	return Promise.reject(error);
});

// 添加响应拦截器
request.interceptors.response.use((response) => {
	uni.hideLoading();
	// 2xx 范围内的状态码都会触发该函数。
	// 获取data数据
	let responseData = response.data;
	// console.log("收到响应结果:{}", responseData);

	// 对其他情况进行兼容处理
	if (!responseData || responseData.data === null) {
		// 判断非200状态码
		if (responseData.code !== 200) {
			uni.showToast({
				title: `${responseData.msg}`,
				icon: 'error'
			});
			// return Promise.reject(responseData.msg);
		}
	}

	// 兼容服务器端返回的字符串数据
	if (typeof responseData === 'string') {
		responseData ? JSON.parse(responseData) : responseData
	}

	return responseData;
}, (error) => {
	// 超出 2xx 范围的状态码都会触发该函数
	if (error.response?.data?.code === 401) {
		uni.showToast({
			title: `${error.response.data.msg}`,
			icon: 'error',
		});
		// 重定向跳转到登录页面，且不能返回
		// uni.redirectTo({
		// 	url: '/pages/login/login'
		// })
	} else {
		console.error('未知响应错误：', error);
		uni.showToast({
			title: '请求失败，请稍后重试',
			icon: 'none',
		});
	}
	return Promise.reject(error);
});

export default request;